Computers, smart phones, and other types of devices are used to perform various types of actions. Some of these actions include initiating searches, collecting and organizing information, and sending and receiving messages. Additionally, many devices are multi-function devices—e.g., a smart phone may function as a voice and data communication device, and as a camera. The increasing number of functions that can be implemented on one device, and the increasing availability of connectivity to these devices, allows people to perform many different functions using one device. For example, in the past, posting a photo to a social network involved taking the photo with a camera and then uploading it to the social network using a computer. Now, a person may take a picture on a smart phone, and then may post the picture to his social networking account from the phone.
While people often perform a sequence of actions that are related to each other (e.g., doing a search on a smart phone, and then e-mailing others the results of the search), the platforms on which people perform these related actions often treat the actions as being disjoint. A person can take a photo, perform an image search related to the photo, and post to a social network about a photo, all from a smart phone. However, the person who performs these actions typically views the different actions as separate events, often involving separate pieces of software. Part of the reason for which these actions are viewed as separate is that the local and remote software infrastructure does not support linking these actions together. Different actions can be part of a single data flow. For example, searching for a restaurant and then writing a social network post about the restaurant are part of a single sequence of actions concerning a single concept (i.e., the restaurant). But the software that is used to perform these different actions often fails to support the linkage between these actions.